<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>

  <script>
    /*
      封装一个方法 - abc
        + 需求:
          => 根据原始数组的长度 **返回** 给我一个新的数组
          => 在回调函数内可以对原始数组内每一个数据进行操作(我需要的操作)
          => 新数组内得到数据, 就是操作以后的数据

      数组常用方法 - map
        + 语法: 数组.map(function (item, index, arr) {})
        + 作用: 对原始数组进行映射
        + 返回值: 就是一个和原始数组一样长度的新数组, 并且内部的数据是被映射操作过的内容
    */

    var arr = [ 10, 20, 30, 40 ]

    var res = arr.map(function (item) { return item * 10 })
    console.log(arr)
    console.log(res)







    // 1. 准备方法
    // Array.prototype.abc = abc
    // function abc(cb) {
    //   // 根据需求1
    //   //   必须要建立一个新数组了
    //   var ary = []

    //   // 我们需要根据原始数组(this) 的长度和 cb 的操作
    //   // 向 ary 内添加数据
    //   for (var i = 0; i < this.length; i++) {
    //     // 使用 abc 方法的人, 会把他想要的操作条件写在 aaa 内
    //     // 需要调用 cb, 并且把每一项给到 aaa 函数
    //     // r 接受到的及时 aaa 函数内的返回值
    //     // 因为 aaa 内返回的是 每一项的 * 10 的结果
    //     // r 得到的就是每一项 * 10 的结果
    //     var r = cb(this[i], i, this)
    //     ary.push(r)
    //   }


    //   // 把操作好的数据返回
    //   return ary
    // }

    // // 2. 将来使用的时候
    // var arr = [ 10, 20, 30, 40, 60, 80 ]
    // console.log('原始数组 : ', arr)

    // var res = arr.abc(function aaa(item, index, arr) {
    //   // 一些操作, 假设我的操作是 * 10
    //   // 以返回值的形式把结果给出去
    //   return item * 10 + 345
    // })

    // console.log(res)

    // res === [ 100, 200, 300, 400 ]


  </script>
</body>
</html>
